
// super，既可以当函数，也可以当对象
// 作为函数，代表父类的构造函数，ES6要求子类的构造函数必须执行一次super函数，但是返回的子类的实例，相当于把父类的构造哈数call到子类上

// 作为对象，在普通方法中，指向父类的原型对象，在静态方法中指向父类
// super无法无法访问父类实例上的方法或者属性
class Foo {
	constructor() {
		this.q = 2;
		this.name = "Foo";
	}
	p() {
		return 2;
	}
	// this指向的是子类
	printName() {
		console.log(this.name);
	}
	static myMethod(msg) {
		console.log("Foo static", msg);
	}
}

class Bar extends Foo {
	constructor() {
		super();
		this.name = "Bar";
		console.log(super.p());
	}
	get m() {
		return super.q;
	}
	n() {
		super.printName();
	}
	static myMethod(msg) {
		super.myMethod(msg);
	}
}

const bar = new Bar();
console.log(bar.m);
bar.n();
Bar.myMethod("Bar");